package me.tyler15555.minibosses.common;
import java.awt.Color;
import java.util.HashMap;
import me.tyler15555.minibosses.block.MBBlocks;
import me.tyler15555.minibosses.entity.EntityCrawler;
import me.tyler15555.minibosses.entity.EntityFeeder;
import me.tyler15555.minibosses.entity.EntityForestGuard;
import me.tyler15555.minibosses.entity.EntityInfernoGolem;
import me.tyler15555.minibosses.entity.EntityIronZombie;
import me.tyler15555.minibosses.entity.EntityLivingBlock;
import me.tyler15555.minibosses.entity.EntitySprout;
import me.tyler15555.minibosses.entity.EntityStalker;
import me.tyler15555.minibosses.entity.EntityStealthCreeper;
import me.tyler15555.minibosses.entity.EntitySuperSlime;
import me.tyler15555.minibosses.entity.EntityTombGuard;
import me.tyler15555.minibosses.entity.EntityWatcher;
import me.tyler15555.minibosses.item.MBItems;
import me.tyler15555.minibosses.network.PacketHandler;
import me.tyler15555.minibosses.util.ConfigHelper;
import me.tyler15555.minibosses.util.EntityFixEvents;
import me.tyler15555.minibosses.util.Resources;
import me.tyler15555.tileentity.TileEntitySummoningPillar;
import net.minecraft.command.ServerCommandManager;
import net.minecraft.entity.EnumCreatureType;
import net.minecraft.entity.monster.EntityGiantZombie;
import net.minecraft.init.Blocks;
import net.minecraft.init.Items;
import net.minecraft.item.ItemStack;
import net.minecraft.server.MinecraftServer;
import net.minecraft.util.WeightedRandomChestContent;
import net.minecraftforge.common.BiomeDictionary;
import net.minecraftforge.common.BiomeDictionary.Type;
import net.minecraftforge.common.ChestGenHooks;
import net.minecraftforge.common.DungeonHooks;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.common.config.Configuration;
import net.minecraftforge.fml.common.FMLCommonHandler;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.Mod.EventHandler;
import net.minecraftforge.fml.common.Mod.Instance;
import net.minecraftforge.fml.common.SidedProxy;
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.event.FMLInterModComms.IMCEvent;
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
import net.minecraftforge.fml.common.event.FMLServerStartingEvent;
import net.minecraftforge.fml.common.registry.EntityRegistry;
import net.minecraftforge.fml.common.registry.GameRegistry;
import net.minecraftforge.oredict.OreDictionary;
import net.minecraftforge.oredict.ShapedOreRecipe;
import org.apache.logging.log4j.Level;
@Mod(modid = "MiniBosses", name = "Mini-Bosses", version = Resources.MOD_VERSION)
public class MiniBosses {
public static org.apache.logging.log4j.Logger logger;
@Instance("MiniBosses")
public static MiniBosses instance;
@SidedProxy(clientSide = "me.tyler15555.minibosses.client.ClientProxy", serverSide = "me.tyler15555.minibosses.common.CommonProxy")
public static CommonProxy proxy;
public static HashMap<String, Integer> entityBanMap = new HashMap();
@EventHandler
public void preLoad(FMLPreInitializationEvent event) {
event.getModLog().log(Level.INFO, "Mini-Bosses is starting to load!");
logger = event.getModLog();
ConfigHelper.setupConfig(new Configuration(event.getSuggestedConfigurationFile()), event.getModLog());
Resources.setupArmorMaterials();
GameRegistry.registerItem(MBItems.ingotDarkIron, "ingotDarkIron");
GameRegistry.registerItem(MBItems.darkIronHelm, "darkIronHelm");
GameRegistry.registerItem(MBItems.darkIronChest, "darkIronChest");
GameRegistry.registerItem(MBItems.darkIronLegs, "darkIronLegs");
GameRegistry.registerItem(MBItems.darkIronBoots, "darkIronBoots");
GameRegistry.registerItem(MBItems.occulus_item, "itemOcculus");
GameRegistry.registerItem(MBItems.ingotInferno, "ingotInferno");
GameRegistry.registerItem(MBItems.infernoHelm, "infernoHelm");
GameRegistry.registerItem(MBItems.infernoChest, "infernoChest");
GameRegistry.registerItem(MBItems.infernoLegs, "infernoLegs");
GameRegistry.registerItem(MBItems.infernoBoots, "infernoBoots");
GameRegistry.registerItem(MBItems.feederTooth, "feederTooth");
GameRegistry.registerItem(MBItems.feederSword, "feederSword");
GameRegistry.registerItem(MBItems.reviveHeart, "reviveHeart");
GameRegistry.registerItem(MBItems.medusaEye, "medusaEye");
GameRegistry.registerItem(MBItems.dodgeGem, "dodgeGem");
GameRegistry.registerItem(MBItems.summonScroll, "summonScroll");
GameRegistry.registerItem(MBItems.bloodTablet, "bloodTablet");
GameRegistry.registerBlock(MBBlocks.blockSlime, "blockSlime");
GameRegistry.registerBlock(MBBlocks.cryptStone, "cryptStone");
GameRegistry.registerBlock(MBBlocks.summoningPillar, "summoningPillar");
GameRegistry.registerTileEntity(TileEntitySummoningPillar.class, "MB-SummonPillar");
}
@EventHandler
public void loadMod(FMLInitializationEvent event) {
PacketHandler.init();
proxy.registerRenderers();
proxy.registerKeyBindings();
OreDictionary.registerOre("ingotDarkIron", MBItems.ingotDarkIron);
OreDictionary.registerOre("ingotInferno", MBItems.ingotInferno);
MinecraftForge.EVENT_BUS.register(new MBEventHandler());
MinecraftForge.EVENT_BUS.register(new EntityFixEvents());
FMLCommonHandler.instance().bus().register(new CraftingHandler());
EntityRegistry.registerGlobalEntityID(EntityIronZombie.class, "MB-IronZombie", EntityRegistry.findGlobalUniqueEntityId(), Color.GRAY.getRGB(), Color.BLACK.getRGB());
EntityRegistry.registerGlobalEntityID(EntityCrawler.class, "MB-Crawler", EntityRegistry.findGlobalUniqueEntityId(), Color.RED.getRGB(), Color.BLACK.getRGB());
EntityRegistry.registerGlobalEntityID(EntitySuperSlime.class, "MB-SuperSlime", EntityRegistry.findGlobalUniqueEntityId(), Color.GREEN.getRGB(), Color.CYAN.getRGB());
EntityRegistry.registerGlobalEntityID(EntityForestGuard.class, "MB-ForestGuard", EntityRegistry.findGlobalUniqueEntityId(), Color.GREEN.getRGB(), Color.WHITE.getRGB());
EntityRegistry.registerGlobalEntityID(EntityStealthCreeper.class, "MB-StealthCreeper", EntityRegistry.findGlobalUniqueEntityId(), Color.WHITE.getRGB(), Color.GRAY.getRGB());
EntityRegistry.registerGlobalEntityID(EntityLivingBlock.class, "MB-LivingBlock", EntityRegistry.findGlobalUniqueEntityId());
EntityRegistry.registerGlobalEntityID(EntityWatcher.class, "MB-Watcher", EntityRegistry.findGlobalUniqueEntityId(), Color.BLACK.getRGB(), Color.WHITE.getRGB());
EntityRegistry.registerGlobalEntityID(EntityFeeder.class, "MB-Feeder", EntityRegistry.findGlobalUniqueEntityId(), Color.RED.getRGB(), Color.WHITE.getRGB());
EntityRegistry.registerGlobalEntityID(EntityTombGuard.class, "MB-TombGuard", EntityRegistry.findGlobalUniqueEntityId());
EntityRegistry.registerGlobalEntityID(EntityInfernoGolem.class, "MB-InfernoGolem", EntityRegistry.findGlobalUniqueEntityId(), Color.RED.getRGB(), Color.LIGHT_GRAY.getRGB());
EntityRegistry.registerGlobalEntityID(EntitySprout.class, "MB-Sprout", EntityRegistry.findGlobalUniqueEntityId());
//EntityRegistry.registerGlobalEntityID(EntityStalker.class, "MB-Stalker", EntityRegistry.findGlobalUniqueEntityId(), Color.BLACK.getRGB(), Color.RED.getRGB() + Color.BLUE.getRGB());
EntityRegistry.addSpawn(EntityIronZombie.class, ConfigHelper.ironZombieSpawnRate, 1, 1, EnumCreatureType.MONSTER, BiomeDictionary.getBiomesForType(Type.PLAINS));
EntityRegistry.addSpawn(EntitySuperSlime.class, ConfigHelper.superSlimeSpawnRate, 1, 1, EnumCreatureType.MONSTER, BiomeDictionary.getBiomesForType(Type.SWAMP));
EntityRegistry.addSpawn(EntityForestGuard.class, ConfigHelper.forestGuardSpawnRate, 1, 1, EnumCreatureType.MONSTER, BiomeDictionary.getBiomesForType(Type.FOREST));
EntityRegistry.addSpawn(EntityCrawler.class, ConfigHelper.crawlerSpawnRate, 1, 1, EnumCreatureType.MONSTER, BiomeDictionary.getBiomesForType(Type.PLAINS));
EntityRegistry.addSpawn(EntityStealthCreeper.class, ConfigHelper.stealthCreeperSpawnRate, 1, 1, EnumCreatureType.CREATURE, BiomeDictionary.getBiomesForType(Type.JUNGLE));
EntityRegistry.addSpawn(EntityFeeder.class, 0, 1, 1, EnumCreatureType.MONSTER, BiomeDictionary.getBiomesForType(Type.JUNGLE));
EntityRegistry.addSpawn(EntityInfernoGolem.class, ConfigHelper.infernoGolemSpawnRate, 1, 4, EnumCreatureType.MONSTER, BiomeDictionary.getBiomesForType(Type.NETHER));
if(ConfigHelper.allowSlimeBlockCrafting) {
GameRegistry.addRecipe(new ItemStack(MBBlocks.blockSlime, 2), new Object[] {"sss", "sss", "sss", 's', Items.slime_ball});
}
if(ConfigHelper.enableGiantSpawn) {
EntityRegistry.addSpawn(EntityGiantZombie.class, ConfigHelper.giantSpawnRate, 1, 1, EnumCreatureType.MONSTER, BiomeDictionary.getBiomesForType(Type.PLAINS));
}
if(ConfigHelper.addMiniBossesToDungeons) {
DungeonHooks.addDungeonMob("MB-IronZombie", 50);
DungeonHooks.addDungeonMob("MB-ForestGuard", 50);
}
if(ConfigHelper.addLootToDungeons) {
ChestGenHooks.addItem(ChestGenHooks.DUNGEON_CHEST, new WeightedRandomChestContent(new ItemStack(MBItems.ingotDarkIron, 3), 1, 10, 10));
}
GameRegistry.addRecipe(new ShapedOreRecipe(MBItems.darkIronHelm, new Object[] {"iii", "i i", "xxx", 'i', "ingotDarkIron"}));
GameRegistry.addRecipe(new ShapedOreRecipe(MBItems.darkIronChest, new Object[] {"i i", "iii", "iii", 'i', "ingotDarkIron"}));
GameRegistry.addRecipe(new ShapedOreRecipe(MBItems.darkIronLegs, new Object[] {"iii", "i i", "i i", 'i', "ingotDarkIron"}));
GameRegistry.addRecipe(new ShapedOreRecipe(MBItems.darkIronBoots, new Object[] {"xxx", "i i", "i i", 'i', "ingotDarkIron"}));
GameRegistry.addRecipe(new ShapedOreRecipe(MBItems.infernoHelm, new Object[] {"iii", "i i", "xxx", 'i', "ingotInferno"}));
GameRegistry.addRecipe(new ShapedOreRecipe(MBItems.infernoChest, new Object[] {"i i", "iii", "iii", 'i', "ingotInferno"}));
GameRegistry.addRecipe(new ShapedOreRecipe(MBItems.infernoLegs, new Object[] {"iii", "i i", "i i", 'i', "ingotInferno"}));
GameRegistry.addRecipe(new ShapedOreRecipe(MBItems.infernoBoots, new Object[] {"xxx", "i i", "i i", 'i', "ingotInferno"}));
GameRegistry.addRecipe(new ItemStack(MBBlocks.summoningPillar), new Object[] {"xxx", " x ", "xxx", 'x', Blocks.quartz_block});
GameRegistry.addShapelessRecipe(new ItemStack(MBItems.summonScroll), new Object[] {Blocks.slime_block, Items.redstone, Items.paper, Blocks.slime_block, Blocks.slime_block, Blocks.slime_block});
GameRegistry.addShapelessRecipe(new ItemStack(MBItems.summonScroll), new Object[] {Blocks.iron_block, Blocks.iron_block, Items.paper, Items.rotten_flesh});
GameRegistry.registerWorldGenerator(new MBWorldGenerator(), 1);
}
@EventHandler
public void finishLoading(FMLPostInitializationEvent event) {
logger.log(Level.INFO, "Mini-Bosses has finished loading!");
}
@EventHandler
public void handleIMC(IMCEvent event) {
for(net.minecraftforge.fml.common.event.FMLInterModComms.IMCMessage message : event.getMessages()) {
if(message.isStringMessage() && message.getStringValue().contains(":")) {
String[] data = message.getStringValue().split(":");
entityBanMap.put(data[0], Integer.valueOf(data[1]));
}
logger.log(Level.INFO, "Mod: " + message.getSender() + " has sent a ban request!");
}
}
@EventHandler
public void onServerStart(FMLServerStartingEvent event) {
MinecraftServer server = event.getServer();
ServerCommandManager manager = (ServerCommandManager)server.getCommandManager();
manager.registerCommand(new CommandMiniBosses());
}
public static int createDarkIronRenderPrefix() {
return proxy.registerDarkArmorRenderPrefix();
}
public static int createInfernoRenderPrefix() {
return proxy.registerInfernoArmorRenderPrefix();
}
}